package com.zcg.blogger.util;

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Map;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * 发送email的工具类
 * @author zcg
 *
 */
public class EmailUtil {

	/**
	 * 用来创建一个Session对象
	 */
	private static Properties props = System.getProperties();

	/**
	 * 代表了javaMail中的一个邮件Session
	 */
	private static Session sendsession;

	/**
	 * 用来发送信息
	 */
	private static Transport transport;

	/**
	 * 用来接收信息
	 */
	private Store store;

	/**
	 * 存储实际发送的电子邮件信息
	 */
	private static Message message;

	private final static String SMTP_QQ = "smtp.qq.com";

	public static void toEmail(Map<String, String> map)
			throws UnsupportedEncodingException {
		// 获得属性,并生成Session对象
		sendsession = Session.getInstance(props, null);

		// 发送邮件的主机SMTP服务器地址,端口默认为25
		props.put("mail.smtp.host", SMTP_QQ);

		// 设置SMTP服务器需要的权限认证
		props.put("mail.smtp.auth", "true");

		// 设置输出调试信息
		sendsession.setDebug(true);

		// 根据Session生成Message对象
		message = new MimeMessage(sendsession);

		try {

			// 设置发信人地址
			message.setFrom(new InternetAddress("1169509982@qq.com"));

			// 设置收件人地址
			message.setRecipient(Message.RecipientType.TO, new InternetAddress(
					map.get("to")));

			// 设置Email标题，并进行编码转换
			message.setSubject((String) map.get("subject"));

			// 设置Email发送时间
			message.setSentDate(new Date());

			// 设置Email内容，并进行编码转换
			// message.setText(new String(((String)
			// map.get("text")).getBytes("UTF-8"), "GBK"));
			message.setContent(map.get("text"), "text/html;charset=utf-8");
			// 保存对Email对象的修改
			message.saveChanges();
		} catch (AddressException e) {
			System.out.println("非法字符串");
			e.printStackTrace();
		} catch (MessagingException e) {

			e.printStackTrace();
		}

		try {
			// 根据Session生成transport对象
			transport = sendsession.getTransport("smtp");

			// 通过指定发送邮件服务器的名称,用户名,密码
			transport.connect("smtp.qq.com", "1169509982", "a4069825");

			// 发送Email
			transport.sendMessage(message, message.getAllRecipients());

		} catch (NoSuchProviderException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		} finally {
			try {
				if (transport != null) {
					// 关闭Transport连接
					transport.close();
				}
			} catch (MessagingException e) {
				System.out.println("无法关闭");
				e.printStackTrace();
			}
		}
	}

}
